package com.woniuxy.service;

import java.util.ArrayList;
import java.util.List;

import com.woniuxy.DTO.AddAnimalTypeDTO;
import com.woniuxy.DTO.AddCageDTO;
import com.woniuxy.DTO.AlgsAnimalDTO;
import com.woniuxy.domain.AlgsAnimal;
import com.woniuxy.vo.AlgsAnimalNameVO;
import com.woniuxy.vo.AlgsCageCountByAnimalNameVO;
import com.woniuxy.vo.AlgsSelectAnimalNameByAnimalIDVO;
import org.apache.ibatis.annotations.Param;

/**
 * 动物库存管理Service接口
 * 
 * @author ruoyi
 * @date 2023-03-20
 */
public interface IAlgsAnimalService 
{
    /**
     * 查询动物库存管理
     * 
     * @param animalId 动物库存管理主键
     * @return 动物库存管理
     */
    public AlgsAnimal selectAlgsAnimalByAnimalId(Long animalId);

    /**
     * 查询动物库存管理列表
     * 
     * @param algsAnimal 动物库存管理
     * @return 动物库存管理集合
     */
    public List<AlgsAnimal> selectAlgsAnimalList(AlgsAnimal algsAnimal);

    /**
     * 新增动物库存管理
     * 
     * @param algsAnimal 动物库存管理
     * @return 结果
     */
    public int insertAlgsAnimal(AlgsAnimal algsAnimal);

    /**
     * 修改动物库存管理
     * 
     * @param algsAnimal 动物库存管理
     * @return 结果
     */
    public int updateAlgsAnimal(AlgsAnimal algsAnimal);

    /**
     * 批量删除动物库存管理
     * 
     * @param animalIds 需要删除的动物库存管理主键集合
     * @return 结果
     */
    public int deleteAlgsAnimalByAnimalIds(Long[] animalIds);

    /**
     * 删除动物库存管理信息
     * 
     * @param animalId 动物库存管理主键
     * @return 结果
     */
    public int deleteAlgsAnimalByAnimalId(Long animalId);
    /**
     * 查询所有库存的动物
     *
     * @param algsAnimalDTO 是传入的数据，详见DTO
     * @return 结果
     */
    ArrayList<Object> selectAllAnimal(AlgsAnimalDTO algsAnimalDTO);
    /**
     * 根据动物ID查询动物名称编号，笼子尺寸，笼子编号
     *
     * @param animalId 传入一个动物的id
     * @return 结果
     */

    List<AlgsSelectAnimalNameByAnimalIDVO> selectAnimalNameByAnimalID(Long animalId);
    /**
     *根据传入的2个参数，1个是动物ID，一个是笼子尺寸id查询，得到的结果集可以获得动物序列号和笼子序列号，还有笼子状态
     *
     * @param animalId 传入一个动物的id
     * @return 结果
     */
    List<AlgsSelectAnimalNameByAnimalIDVO>AnimalDeliveryRecord(@Param("animalId")Long animalId, @Param("cageSizeId")Long cageSizeId);

    /**
     *查询所有的animalName
     *
     * @param 不传参
     * @return 结果
     */

    List<AlgsAnimalNameVO> selectAllAnimalName();
    /**
     *根据唯一的animalName查询对应的animal
     *
     * @param animalName
     * @return 结果
     */

    AlgsAnimal selectAnimalByAnimalName(String animalName);
    /**
     *根据唯一的animalName在cage表里查询对应这个animalName的数量
     *
     * @param animalName
     * @return 结果
     */

    AlgsCageCountByAnimalNameVO selectByAnimalNameByCageCount(String animalName);
    /**
     *新增动物种属
     *
     * @param addAnimalTypeDTO
     * @return 结果
     */
       int addAnimalType(AddAnimalTypeDTO addAnimalTypeDTO);
}
